

class Animal():
    # def __int__(self,name='动物',age=1):                   # 注意：父类中的魔法方法也可以被继承
    #     self.name = name
    #     self.age = age

    def sing(self):
        print(self.name + '唱歌')

    def eat(self):
        print(self.name + '吃饭')

    def sleep(self):
        print(self.name + 'zzz')

class Pig(Animal):                              # 定义类名时，在类名后的括号内添加一个别的类，则会继承添加类的所有属性
    # 子类 重写（覆盖override）父类的方法
    # 则子类对象调用时，会调用子类本身的方法
    def sing(self):
        print(self.name +':吼吼吼~~~')
    def rollinmud(self):
        print(self.name+'踩泥坑')
    #
    # def eat(self):                      #  由于父类中含有子类的这些行为，那么在子类中就可以省略不写
    #     print(self.name+':吃饭')
    # def sleep(self):
    #     print(self.name+':zzz')

class Cat(Animal):
    def catchmouse(self):
        print(self.name+'抓老鼠')


    # def eat(self):                      #  由于父类中含有子类的这些行为，那么在子类中就可以省略不写
    #     print(self.name+':吃饭')
    # def sleep(self):
    #     print(self.name+':zzz')

class BossCat(Cat):                        # 可以多层继承 就是你继承了一个父类，那么也继承了你父类所继承的东西
    pass

class Dog(Animal):
    # 定义方法

    def watchDor(self):
        print(self.name + '看门')

    # def eat(self):                      #  由于父类中含有子类的这些行为，那么在子类中就可以省略不写
    #     print(self.name+':吃饭')
    # def sleep(self):
    #     print(self.name+':zzz')

d1 = Dog()
d1.name = '小黑'
d1.eat()
d1.sing()
d1.watchDor()
d1.sleep()

d2 = Cat()
d2.name = '波斯猫'
d2.eat()
d2.sing()
d2.catchmouse()
d2.sleep()

d3 = Pig()
d3.name = '佩奇'
d3.eat()
d3.sing()
d3.sleep()

d4 = BossCat()
d4.name = '蚩尤'
d4.sing()
d4.catchmouse()
d4.eat()
d4.sleep()